php如何通过JSON RPC与go通讯 您所在的位置:网站首页 golang 切片是线程安全的吗 php如何通过JSON RPC与go通讯

php如何通过JSON RPC与go通讯

#php如何通过JSON RPC与go通讯| 来源: 网络整理| 查看: 265

php如何通过JSON RPC与go通讯 发布时间:2023-01-13 15:08:40 来源:亿速云 阅读:59 作者:iii 栏目:编程语言

今天小编给大家分享一下php如何通过JSON RPC与go通讯的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

php 通过 JSON RPC 与 golang 通讯

此方法为解决php处理计算密集型需求。

go 服务

package main import ( "fmt" "log" "net" "net/rpc" "net/rpc/jsonrpc" )   type Calc struct{}   type Args struct { A  float64 `json:"a"` B  float64 `json:"b"` Op string  `json:"op"` }   type Reply struct { Msg  string  `json:"msg"` Data float64 `json:"data"` }     // 第一个是参数是获取客户端传来的数据,第二个参数是返回的数据   func (c *Calc) Compute(args Args, reply *Reply) error { var ( msg string = "ok" )   switch args.Op { case "+": reply.Data = args.A + args.B case "-": reply.Data = args.A - args.B case "*": reply.Data = args.A * args.B case "/": if args.B == 0 { msg = "in divide op, B can't be zero" } else { reply.Data = args.A / args.B } default: msg = fmt.Sprintf("unsupported op:%s", args.Op) } reply.Msg = msg   if reply.Msg == "ok" { return nil } return fmt.Errorf(msg) }     // 启动server端 func main() { err := rpc.Register(new(Calc))   if err != nil { panic(err) }      listener, err := net.Listen("tcp", "127.0.0.1:8181") if err != nil { panic(err) }   for { conn, err := listener.Accept()   if err != nil { log.Println(err) continue }   go jsonrpc.ServeConn(conn) } }

php 客户端

  public function Call($method, $params) {         $this->conn = fsockopen('127.0.0.1', 8181, $errno, $errstr, 3);         if (!$this->conn) {             return false;         }         $err = fwrite($this->conn, json_encode(array(                 'method' => $method,                 'params' => array($params),                 'id'     => 12345,             ))."\n");         if ($err === false)             return false;         stream_set_timeout($this->conn, 0, 3000);         $line = fgets($this->conn);         if ($line === false) {             return NULL;         }         return json_decode($line,true);     }         public function Test() {         //访问结构体 Calc 下 Compute 方法         $res = $this->Call("Calc.Compute",array('A'=>1,'B'=>2,'Op'=>'+'));         return $res;     }

返回结果

{     "id": 12345,     "result": {         "msg": "ok",         "data": 3     },     "error": null }

以上就是“php如何通过JSON RPC与go通讯”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

推荐阅读: JSON、Protobuf、Thrift、MessagePack 对比和开发指南 php如何用go-micro和consul实现微服务?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php json go 上一篇新闻:设计API接口时要注意什么 下一篇新闻:.vue格式文件怎么打开 猜你喜欢 java中CAS是什么 如何进行混合开发Flutter Java中synchronized的作用及用法 Nacos的作用是什么 10个解放双手的IDEA插件分别是怎样的 WebRTC中SDP是怎样的 不同语言的内存管理有哪些 Handler的原理有哪些 什么是Java内存模型 如何使用Go sync.Map


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有